

FROM node:latest as node

#用于为Docker镜像添加元数据标签。这些标签可以帮助您组织和理解镜像。
LABEL authors="nndxf" version="1.0.0"

WORKDIR /app
RUN git clone https://luoan:a70d5ab0703218f293de9d9c2f5264dd@gitee.com/luoan/go-gin-api.git


FROM golang:alpine AS builder

# 设置环境变量

 #Go将会使用模块查找依赖包的方法（go.mod），而不会在GOPATH目录下查找。代码文件也就可以放置在GOPATH/src外的任何目录下。
 #用环境变量 GO111MODULE 开启或关闭模块支持，它有三个可选值：off、on、auto，默认值是 auto。
 #GO111MODULE=on 模块支持，go 会忽略 GOPATH 和 vendor 文件夹，只根据 go.mod 下载依赖。
 # CGO_ENABLED=0 如果我们的程序使用到了Cgo，那么编译打开Cgo标志，默认情况是关闭的。
 # CGO_ENABLED是一个环境变量，用于控制Go编译器是否启用CGO（C语言调用Go函数）功能。当CGO_ENABLED=0时，表示禁用CGO功能。
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64 \
    GOPROXY=https://goproxy.cn,direct

# 移动到工作目录：/build
# WORKDIR 设置工作目录，如果不存在，则会创建

WORKDIR /build

COPY --from=node /app/go-gin-api/ .
# 将代码复制到容器中
COPY . .

# 将我们的代码编译成二进制可执行文件app
RUN go build -o app .

###################
# 接下来创建一个小镜像
# scratch是Docker中预留的最小的基础镜像
###################
FROM alpine

# 从builder镜像中把/dist 目录下的文件 拷贝到当前目录
COPY --from=builder /build/app /
# 拷贝配置文件到目录
COPY --from=builder /build/config.yaml /


# 声明服务端口
EXPOSE 8080

# 需要运行的命令
ENTRYPOINT ["/app", "config.yaml"]
#ENTRYPOINT ["top", "-b"]
